<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>

  <body>
    <script>
      // 题目一
      // var a = 2;

      // function t1() {
      //   console.log('this.a', this.a);
      // }

      // var obj = {
      //   a: 3,
      //   q: function () {
      //     console.log('this', this);
      //     t1();
      //   },
      //   p: t1,
      // };

      // var f = obj.q;
      // var f2 = obj.p;

      // t1(); //'this.a' 2
      // obj.q(); // 'this'obj  'this.a' 2
      // obj.p(); //'this.a'3
      // f(); //'this' Window   'this.a' 2
      // f2(); //'this.a' 2

      // 题目二
      // var myObject = {
      //   //myObject是window中的一个对象，他的this指针为全局作用下的window
      //   foo: 'bar',
      //   func: () => {
      //     //myObject.func()查找上一个this指向即为myObject的全局作用下的window
      //     var self = this; //window
      //     console.log(this.foo); //undefined
      //     console.log(self.foo); //undefined
      //     (function () {
      //       console.log(this.foo); //undefined
      //       console.log(self.foo); //undefined
      //     })();
      //   },
      // };
      // myObject.func();

      // 修改一下：
      // var myObject = {
      //   a:this,
      //   foo: 'bar',
      //   func: function () {
      //     var self = this;
      //     console.log(this.foo); // bar
      //     console.log(self.foo); // bar
      //     (function () {
      //       console.log(this); // 该this指向的是  window
      //       console.log(this.foo); // undefined
      //       console.log(self.foo); // bar
      //     })();
      //   },
      // };
      // myObject.func();
      // // console.log(myObject.a);
      // let {a:a} = myObject;
      // console.log(a);

      // 题目三
      // let obj = {
      //   bar: 1,
      //   f: function () {
      //     console.log(this.bar);
      //   },
      // };
      // obj.f();//1
      // var bar = 2;
      // let f = obj.f;
      // f();//2

      // 题目四
      // (function () {
      //   var val = 1;
      //   var json = {
      //     val: 10,
      //     dbl: function () {
      //       val *= 2;
      //     },
      //   };
      //   json.dbl(); //undefined
      //   console.log(json.val + val); //12
      // })();

      // 题目五
      // var fullName = 'language';
      // var obj = {
      //   fullName: 'javascript',
      //   prop: {
      //     getFullName: function () {
      //       return this.fullName;
      //     },
      //   },
      // };
      // console.log(obj.prop.getFullName()); //undefined
      // var test = obj.prop.getFullName;
      // console.log(test()); //'language'
    </script>
  </body>
</html>
